home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / net / koprosrc.lzh / pro.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-04-27  |  3.2 KB  |  187 lines

  1. /*    Copyright 1992 H.Ogasawara(COR.)    */
  2.  
  3. /*    protocol test    */
  4.  
  5. #include    <stdio.h>
  6. #include    "proto.h"
  7.  
  8. int    RETRY= 10;
  9.  
  10. WriteCode( code )
  11. {
  12.     unsigned int    time= ONTIME()+60*100;
  13.     while( !OSNS232C() ){
  14.         if( B_KEYSNS() ){
  15.             if( (B_KEYINP()&0xff) == 0x03 )
  16.                 return    -1;
  17.         }else if( ONTIME() > time )
  18.             return    -1;
  19.     }
  20.     OUT232C( code );
  21.     return    0;
  22. }
  23.  
  24. WritePack( pack, len )
  25. unsigned char    *pack;
  26. {
  27.     while( len-- ){
  28.         if( WriteCode( *pack++ ) < 0 )
  29.             return    -1;
  30.     }
  31.     return    0;
  32. }
  33.  
  34. ReadCode( time )
  35. unsigned int    time;
  36. {
  37.     time+= ONTIME();
  38.     while( !ISNS232C() ){
  39.         if( B_KEYSNS() ){
  40.             if( (B_KEYINP()&0xff) == 0x03 )
  41.                 return    -1;
  42.         }else if( ONTIME() > time )
  43.             return    -2;
  44.     }
  45.     return    INP232C() & 0xff;
  46. }
  47.  
  48. ReadPack( pack, len )
  49. unsigned char    *pack;
  50. {
  51.     while( len-- ){
  52.         short    cd;
  53.         if( (cd= ReadCode( 60*100 )) < 0 )
  54.             return    -1;
  55.         *pack++= cd;
  56.     }
  57.     return    0;
  58. }
  59.  
  60. WaitCode( code, time )
  61. unsigned short    code;
  62. unsigned int    time;
  63. {
  64.     short    cd;
  65.     do{
  66.         if( (cd= ReadCode( time )) < 0 )
  67.             return    cd;
  68.         if( cd == CAN )
  69.             return    -1;
  70.     }while( code && cd != code );
  71.     return    cd;
  72. }
  73.  
  74. Send_x128sum( fp )
  75. FILE    *fp;
  76. {
  77.     unsigned char    pack[MAXBUF],
  78.             buf[MAXBUF];
  79.     unsigned short    block= 1;
  80.     if( WaitCode( NAK, 60*100 ) < 0 )
  81.         return    -1;
  82.     do{
  83.         short    cd;
  84.         unsigned int    len;
  85.         unsigned short    i= 0;
  86.         fread( buf, 1, 128, fp );
  87.         len= DataPack( block++ & 0xff, pack, buf, X128SUM );
  88.         if( WritePack( pack, len ) < 0 )
  89.             return    -1;
  90.         printf( "Write block = %d\n", block-1 );
  91.         do{
  92.             if( (cd= WaitCode( 0, 10*100 )) < 0 )
  93.                 return    -1;
  94.             if( ++i >= RETRY )
  95.                 return    -1;
  96.         }while( cd == NAK );
  97.     }while( !feof( fp ) );
  98.     puts( "EOT write." );
  99.     if( WriteCode( EOT ) < 0 )
  100.         return    -1;
  101.     WriteCode( EOT );
  102.     WriteCode( EOT );
  103.     WriteCode( EOT );
  104.     if( WaitCode( ACK, 10*100 ) < 0 )
  105.         return    -1;
  106.     return    0;
  107. }
  108.  
  109. Rece_x128sum( fp )
  110. FILE    *fp;
  111. {
  112.     short    cd;
  113.     unsigned char    pack[MAXBUF];
  114.     do{
  115.         if( WriteCode( __C ) < 0 )
  116.             return    -1;
  117.         puts( "Send __C" );
  118.         if( (cd= WaitCode( 0, 10*100 )) == -1 )
  119.             return    -1;
  120.     }while( cd == -2 );
  121.     goto    cdd;
  122.     for(;;){
  123.         unsigned int    len;
  124.         do{
  125.             cd= ReadCode( 10*100 );
  126.             if( cd == CAN )
  127.                 return    -1;
  128.             if( cd == EOT ){
  129.                 WriteCode( ACK );
  130.                 return    0;
  131.             }
  132.         }while( cd < 0 || (cd != SOH && cd != STX) );
  133.     cdd:
  134.         *pack= cd;
  135.         len= ReadPack( pack+1, 128+5-1 );
  136.         if( DataUnpack( pack, 0 ) < 0 ){
  137.             printf( "Read block = %d  ERR\n", pack[1] );
  138.             WriteCode( NAK );
  139.         }else{
  140.             printf( "Read block = %d\n", pack[1] );
  141.             WriteCode( ACK );
  142.             fwrite( pack+SKIP, 128, 1, fp );
  143.         }
  144.     }
  145. }
  146.  
  147.  
  148. main( argc, argv )
  149. unsigned char    **argv;
  150. {
  151.     short    send= 0;
  152.     FILE    *fp;
  153.     unsigned char    *fname= NULL;
  154.     while( --argc ){
  155.         if( **++argv == '-' ){
  156.             switch( *++*argv ){
  157.             case 's':
  158.                 send= 1;
  159.                 break;
  160.             }
  161.         }else
  162.             fname= *argv;
  163.     }
  164.     if( send ){
  165.         if( fp= fopen( fname, "rb" ) ){
  166.             send= Send_x128sum( fp );
  167.             fclose( fp );
  168.             if( send < 0 )
  169.                 puts( "Break!" );
  170.             else
  171.                 puts( "Ok!" );
  172.         }else
  173.             puts( "read open error." );
  174.     }else{
  175.         if( fp= fopen( fname, "wb" ) ){
  176.             send= Rece_x128sum( fp );
  177.             fclose( fp );
  178.             if( send < 0 )
  179.                 puts( "Break!" );
  180.             else
  181.                 puts( "Ok!" );
  182.         }else
  183.             puts( "write open error." );
  184.     }
  185. }
  186.  
  187.